科研星球

亚组RCS曲线都错了?RCS亚组曲线和RCS交互P值如何计算?

rcs亚组分析以及相应交互作用如何计算?

小编起初也没在意,在rcssci包设计之初考虑过亚组问题,当时觉得再加上背景双色直方条看起来会很花里胡哨,简单来说可以基于分层数据集分别跑一次代码rcssci。随着若干小伙伴分享的文献,小编发现rms包中group分组与分层数据集结果居然是不一样的!另外交互作用,即使是统一用的是相乘交互作用,但是构图、计算、表达仍然有各种套路。小编于是深入研究了一下,结果并不是这么容易啊,一研究就耗时2周。心得总结如下,觉得好小伙伴们记得点赞和转发哦。

一、rcs亚组

小伙伴在群里面以及推送了一些公众号文章给小编, rms包自带了group参数,天桥老师的ggrcs包原理也是直接引用了rms的group参数。起初,小编也是直接跑rms代码直接添加group参数,但是用着用着就发现不对劲,用ggrcs跑还是不对劲。

原因在于:group参数的分组rcs曲线,是以group0组中位数为参照点产生的相对效应量曲线

0.png

0 (1).png

翻阅高分文献,rcs亚组图均不呈现为此图形。仔细看文献的统计方法描述部分,大多详细记录了分层/分亚组分析,也就是小编默认的subset分数据集后操作。下列是几篇高分文献,可嵌套rcssci的ols、logistic、cox、人年发病率模块。

0 (2).png

0 (3).png

0 (4).png

0 (5).png

二、rcs交互作用

文献中绝大部分并未详细描写究竟是a*b 还是 a*rcs(b)的交互,记录清楚的都是ab。也就是在glm模型中直接计算主效应+ 相乘交互项a*b,判断是否存在相乘交互。

而在harrel大神的《Regression Modeling Strategies》书中案例是a*rcs(b)。小编计算过后发现二者统计p值相距甚远。小编理解为a*rcs(b)交互会产生rcs经过knot转化平滑曲线后的线性相乘交互、非线性相乘交互2种。但是,解释起来会比直接a*b难。由于a*rcs(b)并未推广,且与ab主流交互项存在矛盾,故小编依然遵从文献主流的a*b进行后续分析。

0 (6).png

0 (7).png

三、正确rcs亚组曲线流程

正确的rcs亚组曲线,当变量多的时候可以先计算a*b相乘交互项,有意义的再后续分亚组逐步绘制,当然也可以直接全部跑一边亚组然后一起呈现。注意:千万别再直接用rms包或ggrcs包的group参数跑rcs亚组图!上图的案例已经详细测试了差异。要是不会将2条曲线绘在一幅图,可以用subset函数提取亚组数据集后,在使用rcssci包函数分别绘制。

0 (8).png

0 (9).png

四、rcs亚组曲线rcssci包展示

以rcs_cox.group函数为例,可以与rcs_cox.prob等类似,一键输出分亚组曲线,亚组overall、nonlinear、interaction P值。是不是很nice?

0 (10).png



小结

亚组rcs曲线,请用subset提取数据集后手绘,或者rcssci包一键出图。

rcs交互目前全是相乘交互,暂无相加。


没有账号?